from django.shortcuts import render

# Create your views here.

from rest_framework import viewsets
from .models import Student,Classes
from .serializers import StudentSerializers,ClassSerializer

from rest_framework.decorators import action

from rest_framework.response import Response

from rest_framework.status import HTTP_201_CREATED,HTTP_404_NOT_FOUND,HTTP_204_NO_CONTENT


#  封装的形式
#  继承rest_framework 的 ViewSet 实现成为视图集
# class StudentViewSet(viewsets.ViewSet):
#
#     #  查看所有的学生
#     def list(self, request):
#         #  获取所有的学生信息
#         students = Student.objects.filter(is_delete=False)  # 查询集 [(模型对象),(模型对象)]
#
#         #  通过序列化器把 queryset 转换为json数据格式
#         # 把要转换的数据 传入 序列化器作为参数   如果是多个学生  many = True
#         serialize = StudentSerializers(students, many=True)
#         #  serialize.data  里面保存的就是json格式数据
#         #  通过 rest_framework 里面的Response 返回json格式数据
#
#         return Response(serialize.data)
#
#     #  添加学生数据
#     def create(self, request):
#         # 从请求里面得到学生数据（json）  request.data
#         # 通过序列化器进行 反  序列化
#         #  serialize ==> 实例化对象
#         serialize = StudentSerializers(data=request.data)
#         #  数据校验 is_valid  主动报错
#         serialize.is_valid(raise_exception=True)
#         #  数据的持久化保存  validated_data拿到前端传入的数据
#         serialize.save()
#         #  返回响应
#         #   serialize.data  创建的学生模型对象的json数据
#         return Response(serialize.data, status=HTTP_201_CREATED)
#
#     #  获取指定学生的数据
#     def retrieve(self, request, pk):
#         # 获取指定学生的数据
#         try:
#             #  模型对象
#             student = Student.objects.filter(is_delete=False).get(id=pk)
#
#         except Student.DoesNotExist:
#             return Response(status=HTTP_404_NOT_FOUND)
#
#         #  进行序列化器  单条数据就不需要加 many=true
#         serialize = StudentSerializers(student,many=False)
#
#
#         #  返回响应
#         return Response(serialize.data)
#
#
#     def update(self, request, pk):
#         # 修改指定学生的数据
#         try:
#             #  模型对象
#             student = Student.objects.filter(is_delete=False).get(id=pk)
#
#         except Student.DoesNotExist:
#             return Response(status=HTTP_404_NOT_FOUND)
#
#         #  获取前端传入的json数据  新数据 request。data
#         #  旧数据   student
#         #  进行反序列化
#         serialize = StudentSerializers(instance=student,data=request.data)
#         #  数据校验
#         serialize.is_valid(raise_exception=True)
#
#         serialize.save()
#
#         return Response(serialize.data,status=HTTP_201_CREATED)
#     #  删除学生信息数据
#     def destroy(self,request,pk):
#         # 获取指定学生的数据
#         try:
#             #  模型对象
#             student = Student.objects.filter(is_delete=False).get(id=pk)
#
#         except Student.DoesNotExist:
#             return Response(status=HTTP_404_NOT_FOUND)
#
#         #  调用删除方法 ==》 即是调用修改方法  因为我们定义了逻辑删除的方法
#         student.delete()
#         # 返回状态码
#         return Response(status=HTTP_204_NO_CONTENT)



#  ModelViewSet 模型视图集
class StudentViewSet(viewsets.ModelViewSet):
    # 指定   查询数据 变量名必须是 queryset
    queryset = Student.objects.filter(is_delete=False)
    #  指定  序列化器   变量名必须是 serializer_class
    serializer_class = StudentSerializers


# 班级的增删改查
class ClassesViewSet(viewsets.ModelViewSet):
    #  指定操作的模型
    queryset = Classes.objects.filter(is_delete=False)
    #  指定操作的序列器
    serializer_class = ClassSerializer


    #  查看最新的班级   get
    #  127.0.0.1:8000/drfstudy/classes/last_classes
    @action(methods=["get"],detail=False)
    def last_classes(self,request):
        #  模型对象
        # last_classes = Classes.objects.filter(is_delete=False).last()

        #  get_queryset()  ==》 Classes.objects.filter(is_delete=False)
        last_classes = self.get_queryset().last()

        #  序列化
        #  serializer = ClassSerializer(last_classes)
        #  get_serializer(last_classes) = ClassSerializer(last_classes)
        serizlizer = self.get_serializer(last_classes)

        # 响应数据
        return Response(serizlizer.data)